"""
Bcrypt 哈希生成工具

这是一个简单独立的脚本，用于为给定的明文字符串生成 bcrypt 哈希值。
确保生成的哈希值与应用程序验证逻辑所使用的配置完全一致。

如何使用:
1. 在终端中运行此脚本: python generate_hash.py
2. 按照提示输入您想要哈希的明文字符串 (例如: password123 或 test-secret)。
3. 脚本将输出对应的 bcrypt 哈希值。
4. 将生成的哈希值复制并粘贴到您的 SQL 数据填充脚本中。
"""
import bcrypt
import getpass

def generate_bcrypt_hash(plain_text: str) -> str:
    """
    使用 bcrypt 对明文字符串进行哈希处理。

    Args:
        plain_text: 需要哈希的明文字符串。

    Returns:
        经过 bcrypt 哈希并解码为 UTF-8 的字符串。
    """
    if not plain_text:
        raise ValueError("输入字符串不能为空")

    # 将明文字符串编码为字节
    password_bytes = plain_text.encode('utf-8')
    
    # 生成盐并哈希密码
    hashed_bytes = bcrypt.hashpw(password_bytes, bcrypt.gensalt())
    
    # 将哈希后的字节解码为字符串以便存储
    hashed_string = hashed_bytes.decode('utf-8')
    
    return hashed_string

if __name__ == "__main__":
    print("=" * 60)
    print(" Bcrypt 哈希生成器 ".center(60, "="))
    print("=" * 60)
    
    try:
        # 使用 getpass 隐藏输入，更安全
        plain_text_input = getpass.getpass("请输入需要哈希的明文字符串: ")
        
        if plain_text_input:
            generated_hash = generate_bcrypt_hash(plain_text_input)
            print("\n" + "-" * 60)
            print(f"明文字符串: {plain_text_input}")
            print(f"生成的 Bcrypt 哈希值:")
            print(generated_hash)
            print("-" * 60)
            print("\n请将此哈希值复制到您的 SQL 脚本中。")
        else:
            print("\n错误: 未输入任何内容。")

    except Exception as e:
        print(f"\n生成哈希时发生错误: {e}")

    print("\n" + "=" * 60)
